#include "EstadoDeFortificacionDeUnidades.h"
#include "EstadoDeRefuerzoYReubicacion.h"
#include "MovimientoDeEjercitosInvalidoException.h"

EstadoDeFortificacionDeUnidades::EstadoDeFortificacionDeUnidades(EstadoDeRealizacionDePartida* realizacionDePartida)
{
	this->realizacionDePartida = realizacionDePartida;
}

	
void EstadoDeFortificacionDeUnidades::moverEjercitos(Jugador* jugador, Territorio* origen, Territorio* destino, unsigned int cantidadDeEjercitos) {
	
	if ( (origen->enPoderDeJugador(jugador->getColor())) && (destino->enPoderDeJugador(jugador->getColor())) ) {
		origen->quitarEjercitos(cantidadDeEjercitos);
		destino->colocarEjercitos(cantidadDeEjercitos,jugador->getColor());
	}
	else
		throw MovimientoDeEjercitosInvalidoException();
	realizacionDePartida->getJuego()->pasarAlSiguienteTurno();
	realizacionDePartida->setEstado(realizacionDePartida->getEstadoDeRefuerzoYReubicacion());
	((EstadoDeRefuerzoYReubicacion*)realizacionDePartida->getEstadoDeRefuerzoYReubicacion())->
		reforzarEjercitos(realizacionDePartida->getJuego()->getJugadorEnTurno());
}

string EstadoDeFortificacionDeUnidades::toString() {
	return "EstadoDeFortificacionDeUnidades";
}

EstadoDeFortificacionDeUnidades::~EstadoDeFortificacionDeUnidades()
{
}
